package cl.tinet.trainee.salas.ejb.reserva;

import java.text.DateFormat;
import java.text.SimpleDateFormat;
import java.util.Date;
import java.util.List;

import javax.annotation.PostConstruct;
import javax.annotation.Resource;
import javax.ejb.SessionContext;
import javax.ejb.Stateless;
import javax.persistence.EntityManager;
import javax.persistence.PersistenceContext;

import cl.tinet.trainee.salas.dao.ReservaDao;
import cl.tinet.trainee.salas.dao.ReservaDaoInterfaz;
import cl.tinet.trainee.salas.model.ReservaSala;
import cl.tinet.trainee.salas.model.Segmentos;
import cl.tinet.trainee.salas.model.excepciones.NoExisteReserva;

/**
 * 
 * Nombre del Bean RESERVA para poder trabajarlo.
 * 
 * @author Naht-Sams
 */
@Stateless(mappedName = "ReservaSalaBean", name = "ReservaSalaBean")
public class ReservaBeanImpl implements ReservaSalaInterfaz {
    /**
     * Instancia de la clase UsuarioDao.
     */
    private ReservaDaoInterfaz dao;
    /**
     * Nombre de la persistencia que esta haciendo la conexion a al BD.
     */
    @PersistenceContext(unitName = "MySqlDS")
    private EntityManager em;
    /**
     * Session.
     */
    @Resource
    SessionContext ctx;

    @PostConstruct
    private void init() {
        if (dao == null) {
            dao = new ReservaDao(em);
        }
    }

    public EntityManager getEm() {
        return em;
    }

    public void setEm(EntityManager em) {
        this.em = em;
    }

    /** {@inheritDoc} */
    public ReservaSala buscarReservaSalaBean(ReservaSala dato) {
        return null;
    }

    /** {@inheritDoc} */
    public boolean buscarReservaSalaAgregado(ReservaSala dato) {
        List<ReservaSala> lista = dao.buscarReservaSalaAntesDeCrear(dato);
        if (lista.isEmpty()){
            return false;
        }else{
            return true;
        }
    }

    /** {@inheritDoc} */
    public void modificarReservaSalaBean(ReservaSala dato) {
    }

    /**
     * {@inheritDoc}
     * 
     * @throws NoExisteReserva
     */
    public void eliminarReservaSalaBean(ReservaSala dato)
            throws NoExisteReserva {
        ReservaSala sala = null;
        sala = dao.buscarReservaSala(dato);
        if (sala != null) {
            dao.borrarReservaSala(sala);
        } else {
            throw new NoExisteReserva(NoExisteReserva.NO_EXISTE_RESERVA);
        }
    }

    /** {@inheritDoc} */
    public void agregarReservaSalaBean(ReservaSala dato) {
        dao.agregarReservaSala(dato);
    }

    /** {@inheritDoc} */
    public List<ReservaSala> buscarReservaSalaTodos(int codSala,
            String fechaSeleccionada) {
        List<ReservaSala> listaReservas;
        listaReservas = dao.buscarListaReservaSala(codSala, fechaSeleccionada);
        return listaReservas;
    }

    /** {@inheritDoc} */
    public boolean validarFechaSeleccionada(Date fecha) {
        DateFormat formatoFecha = new SimpleDateFormat("dd/MM/yyyy");
        SimpleDateFormat formatoHora = new SimpleDateFormat("HH:mm:ss");
        Date fechaActual = new Date();
        if (fecha.before(fechaActual)) {
            // La fecha selecciona es menor
        } else {
            // La fecha seleccionada es mayor
        }
        return false;
    }

    /** {@inheritDoc} */
    public List<Segmentos> buscarSegmentos() {
        List<Segmentos> segmentos = dao.obtenerSegmentos();
        return segmentos;
    }

    /** {@inheritDoc} */
    public List<ReservaSala> buscarReservaSalaNormal(int codSala,
            String fechaSeleccionada, String username) {
        List<ReservaSala> listaReservas;
        listaReservas =
                dao.buscarListaReservaSalaNormal(codSala, fechaSeleccionada,
                        username);
        return listaReservas;
    }

}
